package map;

import java.util.HashMap;
import java.util.Map;

/**
 * Map 查找表
 * Map是JAVA集合框架中的一员。但是并不继承自java.util.Collection接口！！！！
 *
 * Map体现的样子是一个多行两列的表格，其中左列为key,右列为value。
 * Map总是根据key-value对的形式保存数据，且总是根据key获取对应的value
 * Map中可以使用null做为key或value。
 * Map要求key是不允许重复的(equals比较)
 *
 * Map本身是一个接口
 * 常用的实现类:
 * java.util.HashMap:基于散列算法实现的Map，也称为散列表。当今查询速度最快的数据结构。
 * java.util.TreeMap:基于二叉树实现的Map。
 *
 *
 * V put(K k,V v)       向Map中添加一组键值对。
 *          由于Map中的key不允许重复，所以如果使用Map已有的key存放新的value时，则是替换value操作
 *          并将被替换的value返回。如果没有任何替换时，返回值为null。
 *
 * 如果Map的value是包装类类型时，要用包装类定义的变量接收返回值，避免使用基本类型因自动拆箱导致空指针!
 * */
public class MapDemo {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("数学", 135);
        map.put("语文", 126);
        map.put("英语", 120);
        map.put("理综", 288);
        System.out.println(map);
        System.out.println(map.size());
        map.put("物理", 108);
        map.put("化学", 95);
        map.put("生物", 85);
        System.out.println(map);
        System.out.println(map.size());
        map.remove("英语");
        System.out.println(map);
        System.out.println(map.size());
        boolean tf = map.containsKey("理综");
        System.out.println(tf);

        /*
            V get(Object key)
            根据给定的key获取对应的value
            如果给定的key不存在，则返回值为null
         */
        Integer v = map.get("数学");
        System.out.println(v);
        v = map.get("体育");
        System.out.println(v);
        /*
            返回当前Map中的元素个数。每组键值对算一个元素。
         */
        int size = map.size();
        System.out.println("size:"+size);
        /*
            V remove(Object key)
            删除Map中指定的key对应的这组键值对。返回值为这个key对应的value。
         */
        v = map.remove("英语");
        System.out.println(v);
        System.out.println(map);

        /*
            boolean containsKey(Object key)
            判断当前Map是否包含给定的key
            boolean containsValue(Object value)
            判断当前Map是否包含给定的value
         */
        //判断当前Map是否包含key:"数学"
        boolean ck = map.containsKey("数学");
        System.out.println("包含key:"+ck);
        boolean cv = map.containsValue(99);
        System.out.println("包含value:"+cv);

        //清空Map
        map.clear();
        System.out.println(map);
    }
}
